home *** CD-ROM | disk | FTP | other *** search
- package java.util;
-
- import java.lang.ref.Reference;
- import java.lang.ref.ReferenceQueue;
- import java.util.concurrent.ConcurrentHashMap;
- import java.util.concurrent.ConcurrentMap;
-
- public abstract class ResourceBundle {
- private static final int INITIAL_CACHE_SIZE = 32;
- private static final ResourceBundle NONEXISTENT_BUNDLE = new 1();
- private static final ConcurrentMap<CacheKey, BundleReference> cacheList = new ConcurrentHashMap(32);
- private static final ConcurrentMap<CacheKey, Thread> underConstruction = new ConcurrentHashMap();
- private static final ReferenceQueue referenceQueue = new ReferenceQueue();
- protected ResourceBundle parent = null;
- private Locale locale = null;
- private String name;
- private volatile boolean expired;
- private volatile CacheKey cacheKey;
- private volatile Set<String> keySet;
-
- public final String getString(String var1) {
- return (String)this.getObject(var1);
- }
-
- public final String[] getStringArray(String var1) {
- return (String[])this.getObject(var1);
- }
-
- public final Object getObject(String var1) {
- Object var2 = this.handleGetObject(var1);
- if (var2 == null) {
- if (this.parent != null) {
- var2 = this.parent.getObject(var1);
- }
-
- if (var2 == null) {
- throw new MissingResourceException("Can't find resource for bundle " + this.getClass().getName() + ", key " + var1, this.getClass().getName(), var1);
- }
- }
-
- return var2;
- }
-
- public Locale getLocale() {
- return this.locale;
- }
-
- private static ClassLoader getLoader() {
- Class[] var0 = getClassContext();
- Class var1 = var0[2];
- Object var2 = var1 == null ? null : var1.getClassLoader();
- if (var2 == null) {
- var2 = java.util.ResourceBundle.RBClassLoader.access$000();
- }
-
- return (ClassLoader)var2;
- }
-
- private static native Class[] getClassContext();
-
- protected void setParent(ResourceBundle var1) {
- assert var1 != NONEXISTENT_BUNDLE;
-
- this.parent = var1;
- }
-
- public static final ResourceBundle getBundle(String var0) {
- return getBundleImpl(var0, Locale.getDefault(), getLoader(), java.util.ResourceBundle.Control.access$300());
- }
-
- public static final ResourceBundle getBundle(String var0, Control var1) {
- return getBundleImpl(var0, Locale.getDefault(), getLoader(), var1);
- }
-
- public static final ResourceBundle getBundle(String var0, Locale var1) {
- return getBundleImpl(var0, var1, getLoader(), java.util.ResourceBundle.Control.access$300());
- }
-
- public static final ResourceBundle getBundle(String var0, Locale var1, Control var2) {
- return getBundleImpl(var0, var1, getLoader(), var2);
- }
-
- public static ResourceBundle getBundle(String var0, Locale var1, ClassLoader var2) {
- if (var2 == null) {
- throw new NullPointerException();
- } else {
- return getBundleImpl(var0, var1, var2, java.util.ResourceBundle.Control.access$300());
- }
- }
-
- public static ResourceBundle getBundle(String var0, Locale var1, ClassLoader var2, Control var3) {
- if (var2 != null && var3 != null) {
- return getBundleImpl(var0, var1, var2, var3);
- } else {
- throw new NullPointerException();
- }
- }
-
- private static ResourceBundle getBundleImpl(String var0, Locale var1, ClassLoader var2, Control var3) {
- if (var1 != null && var3 != null) {
- CacheKey var4 = new CacheKey(var0, var1, var2);
- ResourceBundle var5 = null;
- BundleReference var6 = (BundleReference)cacheList.get(var4);
- if (var6 != null) {
- var5 = (ResourceBundle)var6.get();
- Object var13 = null;
- }
-
- if (isValidBundle(var5) && hasValidParentChain(var5)) {
- return var5;
- } else {
- boolean var7 = var3 == java.util.ResourceBundle.Control.access$300() || var3 instanceof SingleFormatControl;
- List var8 = var3.getFormats(var0);
- if (!var7 && !checkList(var8)) {
- throw new IllegalArgumentException("Invalid Control: getFormats");
- } else {
- ResourceBundle var9 = null;
-
- for(Locale var10 = var1; var10 != null; var10 = var3.getFallbackLocale(var0, var10)) {
- List var11 = var3.getCandidateLocales(var0, var10);
- if (!var7 && !checkList(var11)) {
- throw new IllegalArgumentException("Invalid Control: getCandidateLocales");
- }
-
- var5 = findBundle(var4, var11, var8, 0, var3, var9);
- if (isValidBundle(var5)) {
- boolean var12 = Locale.ROOT.equals(var5.locale);
- if (!var12 || var5.locale.equals(var1) || var11.size() == 1 && var5.locale.equals(var11.get(0))) {
- break;
- }
-
- if (var12 && var9 == null) {
- var9 = var5;
- }
- }
- }
-
- if (var5 == null) {
- if (var9 == null) {
- throwMissingResourceException(var0, var1, java.util.ResourceBundle.CacheKey.access$400(var4));
- }
-
- var5 = var9;
- }
-
- return var5;
- }
- }
- } else {
- throw new NullPointerException();
- }
- }
-
- private static final boolean checkList(List var0) {
- boolean var1 = var0 != null && var0.size() != 0;
- if (var1) {
- int var2 = var0.size();
-
- for(int var3 = 0; var1 && var3 < var2; ++var3) {
- var1 = var0.get(var3) != null;
- }
- }
-
- return var1;
- }
-
- private static final ResourceBundle findBundle(CacheKey var0, List<Locale> var1, List<String> var2, int var3, Control var4, ResourceBundle var5) {
- Locale var6 = (Locale)var1.get(var3);
- ResourceBundle var7 = null;
- if (var3 != var1.size() - 1) {
- var7 = findBundle(var0, var1, var2, var3 + 1, var4, var5);
- } else if (var5 != null && Locale.ROOT.equals(var6)) {
- return var5;
- }
-
- Reference var8;
- while((var8 = referenceQueue.poll()) != null) {
- cacheList.remove(((CacheKeyReference)var8).getCacheKey());
- }
-
- boolean var9 = false;
- var0.setLocale(var6);
- ResourceBundle var10 = findBundleInCache(var0, var4);
- if (isValidBundle(var10)) {
- var9 = var10.expired;
- if (!var9) {
- if (var10.parent == var7) {
- return var10;
- }
-
- BundleReference var11 = (BundleReference)cacheList.get(var0);
- if (var11 != null && var11.get() == var10) {
- cacheList.remove(var0, var11);
- }
- }
- }
-
- if (var10 != NONEXISTENT_BUNDLE) {
- CacheKey var16 = (CacheKey)var0.clone();
-
- while(!beginLoading(var16)) {
- var10 = findBundleInCache(var0, var4);
- if (var10 != null) {
- if (var10 == NONEXISTENT_BUNDLE) {
- return var7;
- }
-
- var9 = var10.expired;
- if (!var9) {
- if (var10.parent == var7) {
- return var10;
- }
-
- BundleReference var12 = (BundleReference)cacheList.get(var0);
- if (var12 != null && var12.get() == var10) {
- cacheList.remove(var0, var12);
- }
- }
- }
- }
-
- var10 = loadBundle(var0, var2, var4, var9);
- if (var10 != null) {
- if (var10.parent == null) {
- var10.setParent(var7);
- }
-
- var10.locale = var6;
- var10 = putBundleInCache(var0, var10, var4);
- endLoading(var16);
- return var10;
- }
-
- putBundleInCache(var0, NONEXISTENT_BUNDLE, var4);
- endLoading(var16);
- }
-
- assert underConstruction.get(var0) != Thread.currentThread();
-
- return var7;
- }
-
- private static final ResourceBundle loadBundle(CacheKey var0, List<String> var1, Control var2, boolean var3) {
- assert underConstruction.get(var0) == Thread.currentThread();
-
- Locale var4 = var0.getLocale();
- ResourceBundle var5 = null;
- int var6 = var1.size();
-
- for(int var7 = 0; var7 < var6; ++var7) {
- String var8 = (String)var1.get(var7);
-
- try {
- var5 = var2.newBundle(var0.getName(), var4, var8, var0.getLoader(), var3);
- } catch (Throwable var10) {
- java.util.ResourceBundle.CacheKey.access$500(var0, var10);
- }
-
- if (var5 != null) {
- var0.setFormat(var8);
- var5.name = var0.getName();
- var5.locale = var4;
- var5.expired = false;
- break;
- }
- }
-
- assert underConstruction.get(var0) == Thread.currentThread();
-
- return var5;
- }
-
- private static final boolean isValidBundle(ResourceBundle var0) {
- return var0 != null && var0 != NONEXISTENT_BUNDLE;
- }
-
- private static final boolean hasValidParentChain(ResourceBundle var0) {
- for(long var1 = System.currentTimeMillis(); var0 != null; var0 = var0.parent) {
- if (var0.expired) {
- return false;
- }
-
- CacheKey var3 = var0.cacheKey;
- if (var3 != null) {
- long var4 = java.util.ResourceBundle.CacheKey.access$600(var3);
- if (var4 >= 0L && var4 <= var1) {
- return false;
- }
- }
- }
-
- return true;
- }
-
- private static final boolean beginLoading(CacheKey var0) {
- Thread var1 = Thread.currentThread();
- Thread var2;
- if ((var2 = (Thread)underConstruction.putIfAbsent(var0, var1)) != null && var2 != var1) {
- synchronized(var2) {
- while(underConstruction.get(var0) == var2) {
- try {
- var2.wait();
- } catch (InterruptedException var6) {
- }
- }
-
- return false;
- }
- } else {
- return true;
- }
- }
-
- private static final void endLoading(CacheKey var0) {
- Thread var1 = Thread.currentThread();
-
- assert underConstruction.get(var0) == var1;
-
- underConstruction.remove(var0);
- synchronized(var1) {
- var1.notifyAll();
- }
- }
-
- private static final void throwMissingResourceException(String var0, Locale var1, Throwable var2) {
- if (var2 instanceof MissingResourceException) {
- var2 = null;
- }
-
- throw new MissingResourceException("Can't find bundle for base name " + var0 + ", locale " + var1, var0 + "_" + var1, "", var2);
- }
-
- private static final ResourceBundle findBundleInCache(CacheKey var0, Control var1) {
- BundleReference var2 = (BundleReference)cacheList.get(var0);
- if (var2 == null) {
- return null;
- } else {
- ResourceBundle var3 = (ResourceBundle)var2.get();
- if (var3 == null) {
- return null;
- } else {
- ResourceBundle var4 = var3.parent;
-
- assert var4 != NONEXISTENT_BUNDLE;
-
- if (var4 != null && var4.expired) {
- assert var3 != NONEXISTENT_BUNDLE;
-
- var3.expired = true;
- var3.cacheKey = null;
- cacheList.remove(var0, var2);
- var3 = null;
- } else {
- CacheKey var5 = var2.getCacheKey();
- long var6 = java.util.ResourceBundle.CacheKey.access$600(var5);
- if (!var3.expired && var6 >= 0L && var6 <= System.currentTimeMillis()) {
- if (var3 != NONEXISTENT_BUNDLE) {
- synchronized(var3) {
- var6 = java.util.ResourceBundle.CacheKey.access$600(var5);
- if (!var3.expired && var6 >= 0L && var6 <= System.currentTimeMillis()) {
- try {
- var3.expired = var1.needsReload(var5.getName(), var5.getLocale(), var5.getFormat(), var5.getLoader(), var3, java.util.ResourceBundle.CacheKey.access$700(var5));
- } catch (Exception var11) {
- java.util.ResourceBundle.CacheKey.access$500(var0, var11);
- }
-
- if (var3.expired) {
- var3.cacheKey = null;
- cacheList.remove(var0, var2);
- } else {
- setExpirationTime(var5, var1);
- }
- }
- }
- } else {
- cacheList.remove(var0, var2);
- var3 = null;
- }
- }
- }
-
- return var3;
- }
- }
- }
-
- private static final ResourceBundle putBundleInCache(CacheKey var0, ResourceBundle var1, Control var2) {
- setExpirationTime(var0, var2);
- if (java.util.ResourceBundle.CacheKey.access$600(var0) != -1L) {
- CacheKey var3 = (CacheKey)var0.clone();
- BundleReference var4 = new BundleReference(var1, referenceQueue, var3);
- var1.cacheKey = var3;
- BundleReference var5 = (BundleReference)cacheList.putIfAbsent(var3, var4);
- if (var5 != null) {
- ResourceBundle var6 = (ResourceBundle)var5.get();
- if (var6 != null && !var6.expired) {
- var1.cacheKey = null;
- var1 = var6;
- var4.clear();
- } else {
- cacheList.put(var3, var4);
- }
- }
- }
-
- return var1;
- }
-
- private static final void setExpirationTime(CacheKey var0, Control var1) {
- long var2 = var1.getTimeToLive(var0.getName(), var0.getLocale());
- if (var2 >= 0L) {
- long var4 = System.currentTimeMillis();
- java.util.ResourceBundle.CacheKey.access$702(var0, var4);
- java.util.ResourceBundle.CacheKey.access$602(var0, var4 + var2);
- } else {
- if (var2 < -2L) {
- throw new IllegalArgumentException("Invalid Control: TTL=" + var2);
- }
-
- java.util.ResourceBundle.CacheKey.access$602(var0, var2);
- }
-
- }
-
- public static final void clearCache() {
- clearCache(getLoader());
- }
-
- public static final void clearCache(ClassLoader var0) {
- if (var0 == null) {
- throw new NullPointerException();
- } else {
- Set var1 = cacheList.keySet();
-
- for(CacheKey var3 : var1) {
- if (var3.getLoader() == var0) {
- var1.remove(var3);
- }
- }
-
- }
- }
-
- protected abstract Object handleGetObject(String var1);
-
- public abstract Enumeration<String> getKeys();
-
- public boolean containsKey(String var1) {
- if (var1 == null) {
- throw new NullPointerException();
- } else {
- for(ResourceBundle var2 = this; var2 != null; var2 = var2.parent) {
- if (var2.handleKeySet().contains(var1)) {
- return true;
- }
- }
-
- return false;
- }
- }
-
- public Set<String> keySet() {
- HashSet var1 = new HashSet();
-
- for(ResourceBundle var2 = this; var2 != null; var2 = var2.parent) {
- var1.addAll(var2.handleKeySet());
- }
-
- return var1;
- }
-
- protected Set<String> handleKeySet() {
- if (this.keySet == null) {
- synchronized(this) {
- if (this.keySet == null) {
- HashSet var2 = new HashSet();
- Enumeration var3 = this.getKeys();
-
- while(var3.hasMoreElements()) {
- String var4 = (String)var3.nextElement();
- if (this.handleGetObject(var4) != null) {
- var2.add(var4);
- }
- }
-
- this.keySet = var2;
- }
- }
- }
-
- return this.keySet;
- }
-
- // $FF: synthetic method
- static ReferenceQueue access$200() {
- return referenceQueue;
- }
- }
-